//Code :
                // Simple Calculator //
		// By:  FutureSoft//
		// www.FutureSoft.yolasite.com//

		// Can have Flaws //


#include"stdio.h"
#include"conio.h"
#include"dos.h"
#include"stdlib.h"
#include"string.h"

void DISPNUM(char *);
void main()
{
	clrscr();

	_setcursortype(0);
	gotoxy(30,19);
	textcolor(GREEN+BLINK);
	cprintf("SIMPLE CALCULATOR");
	gotoxy(50,21);
	textcolor(BLUE+BLINK);
	cprintf("By Rakesh Juyal");
	getch();
//	clrscr();

	int x=30,y=10;

	textcolor(WHITE);
	gotoxy(x,y);
	cprintf("7    8    9");
	gotoxy(x,y+2);
	cprintf("4    5    6");
	gotoxy(x,y+4);
	cprintf("1    2    3");
	gotoxy(x,y+6);
	cprintf("0");

	textcolor(RED);
	gotoxy(x+5,y+6);
	cprintf(".    =");


	textcolor(GREEN);
	x=x+15;
	gotoxy(x,y);
	cprintf("/");

	gotoxy(x,y+2);
	cprintf("*");

	gotoxy(x,y+4);
	cprintf("-");

	gotoxy(x,y+6);
	cprintf("+");

//Draw The For Calc//
	x=28;y=5;
	gotoxy(x,y);

	textcolor(WHITE);

	//  Ú	     & 		¿ //
	cprintf("%c",218);
	gotoxy(28+20,y);
	cprintf("%c",191);
	//  Ú	     & 		¿ //

//Horiz. Boundary
	for(x=29;x<=28+19;x++)
	{
		gotoxy(x,y);
		cprintf("%c",196);
		gotoxy(x,y+12);
		cprintf("%c",196);
	}
//End of Horiz. Bound

//  Ù  		    &           À  //
	cprintf("%c",217);
	x=28;y=y+12;
	gotoxy(x,y);
	cprintf("%c",192);
//End of  Ù  		    &           À  //

//Vertic. Bound.

	for(y=6;y<=16;y++)
	{
		gotoxy(x,y);
		cprintf("%c",179);
		gotoxy(x+20,y);
		cprintf("%c",179);
	}
//End of Vertic Bou.

	y=6;

	for(x=30;x<=30+16;x++)
	{
		gotoxy(x,y);
		cprintf("%c",196);
		gotoxy(x,y+2);
		cprintf("%c",196);
	}

	gotoxy(30,y+1);
	cprintf("%c               %c",179,179);

	gotoxy(30,y);
	cprintf("%c",218);
	gotoxy(30+16,y);
	cprintf("%c",191);


	gotoxy(30,y+2);
	cprintf("%c",192);
	gotoxy(30+16,y+2);
	cprintf("%c",217);


//End of Vertic Bound.

	//OutPut at X=30,Y=8//


	char ch;
char operand1[15]="",operand2[15]="",BLANK[15]="            ";
	char operator1,first='y';
	long double num1=0,num2=0;
	int i=0,ERROR=0; //Digits
	int MAX=10;
	DISPNUM(0);
	do
	{
		ch=getch();
		if(ch=='x1b')
		{
			for(int i=1000;i>=200;i=i-50)
			{
				sound(i);
				delay(100);
			}
			nosound();
			break;
		}

		//Numeric//
		if((ch>='0')&&(ch<='9'))
		{
			if(i<MAX)
			{
				if(first=='y')
				{
					operand1[i]=ch;
					DISPNUM(operand1);
					i++;
				}
				else
				{
					operand2[i]=ch;
					DISPNUM(operand2);
					i++;
				}
			}
			else		//More than 8 digit
			{
				ERROR=1;
			}
		}
		else if(ch=='.')
		{
			if(first=='y')
			{
				if(strchr(operand1,'.')==NULL)
				{
					operand1[i]=ch;
					i++;
				}
				DISPNUM(operand1);
			}
			else
			{
				if(strchr(operand2,'.')==NULL)
				{
					operand2[i]=ch;
					i++;
				}
				DISPNUM(operand2);
			}
		}
		//Non Numeric
		else if (ch=='*')
		{
			operator1='*';
			first='n';
			i=0;
		}
		else if (ch=='/')
		{
			operator1='/';
			first='n';
			i=0;
		}
		else if (ch=='+')
		{
			operator1='+';
			first='n';
			i=0;
		}
		else if (ch=='-')
		{
			operator1='-';
			first='n';
			i=0;
		}
		else if ((ch=='=')||(ch=='
'))
		{
			//Store in Floating
			if(strcmpi(operand1,BLANK)!=0)
			{
				num1=_atold(operand1);
			}
			if(strcmpi(operand2,BLANK)!=0)
			{
				num2=_atold(operand2);
			}
			//Now Calculate
			switch (operator1)
			{
				case '+':
					num1=num1+num2;
					break;
				case '-':
					num1=num1-num2;
					break;
				case '*':
					num1=num1*num2;
					break;
				case '/':
					num1=num1/num2;
					break;
			}
			//ltoa(num1,operand1,10);
			gcvt(num1,12,operand1);
			DISPNUM(operand1);
			i=0;
			first='y';

			strcpy(operand1,BLANK);
			strcpy(operand2,BLANK);
		}
		else              //Invalid Choice
		{
			ERROR=1;
		}

//Beep On ERROR else ------ //
		if (ERROR==0)
		{
			sound(920);
		}
		else
		{
			sound(100);
			ERROR=0;
		}
		delay(250);
		nosound();

		gotoxy(1,1);
		cprintf("%d",i);

	}while(1);


//	clrscr();
	gotoxy(30,19);
	textcolor(GREEN+BLINK);
	cprintf("SIMPLE CALCULATOR");
	gotoxy(50,21);
	textcolor(BLUE+BLINK);
	cprintf("By Rakesh Juyal");
//	getch();
}
void DISPNUM(char *num)
{
	textbackground(RED);
	gotoxy(31,7);
	cprintf("               ");
	gotoxy(31,7);
	cprintf("%s",num);
}


